﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI.WebControls;
using TVH.Comum;
using System.Web.UI;

namespace TVH.Web.Code
{
    public class BasePage : System.Web.UI.Page
    {

        public BasePage Handler
        {
            get
            {
                return (BasePage)Context.Handler;
            }
        }

        protected virtual Control FindControlRecursive(string id)
        {
            return FindControlRecursive(id, this);
        }
        protected virtual Control FindControlRecursive(string id, Control parent)
        {
            // If parent is the control we're looking for, return it
            if (string.Compare(parent.ID, id, true) == 0)
                return parent;
            // Search through children
            foreach (Control child in parent.Controls)
            {
                Control match = FindControlRecursive(id, child);
                if (match != null)
                    return match;
            }
            // If we reach here then no control with id was found
            return null;
        }


        public int? ModelID
        {
            get
            {
                var hdn = FindControlRecursive("hdnID") as HiddenField;
                string id = null;
                if (hdn != null)
                {
                    id = hdn.Value;
                }
                return string.IsNullOrEmpty(id) ? null : new Nullable<int>(Convert.ToInt32(id));
            }
        }

        public string GridAction
        {
            get
            {
                var hdn = FindControlRecursive("hdnGridAction") as HiddenField;
                if (hdn != null)
                {
                    return hdn.Value;
                }
                return null;
            }
        }

        public void ExibirMensagemErro(string mensagem, Exception ex)
        {
            ex = ex ?? new Exception("Sem mensagem informada");
            ExibirMensagem(string.Format("{0}<!--{1}-->", mensagem, HttpUtility.HtmlEncode(ex.ToString())), "erro");
        }

        public void ExibirMensagemSucesso(string mensagem)
        {
            ExibirMensagem(mensagem, "sucesso");
        }

        public void ExibirMensagem(string mensagem, string tipo)
        {
            var lbl = FindControlRecursive("lblMensagem") as Label;
            if (lbl != null)
            {
                lbl.CssClass = tipo;
                lbl.Text = mensagem;
            }
            else
            {
                throw new Exception("Label com id 'lblMensagem' não foi encontrado nessa página.");
            }
        }

        public new SessionManager Session {
            get { return SessionManager.Instance;  }
        }
    }
}